import {reqCartList,reqDeleteCartById,reqUpdateCheckedById} from '@/api'
//search的小仓库
//state:仓库存储数据的地方
const state = {
    cartList:[]
};
//mutations: 修改state的唯一手段
const mutations = {
    GETCARTLIST(state,cartList){
        state.cartList = cartList
    }
};
//action:处理action,可以书写自己的业务逻辑，也可以处理异步
const actions = {
    //获取search模块数据
   async getCartList({commit}){
    //当前接口给服务器传递参数params，[至少是一个空对象]   reqGetSearchInfo({})
    //params形参： 是当用户派发action的时候，第二个参数传递过来的，至少是一个空对象 
        let result = await reqCartList()
        if(result.code == 200){
            commit("GETCARTLIST",result.data)
        }
    },
    //删除购物车某一个产品
    async deleteCartListBySkuId({commit},skuId){
        let result = await reqDeleteCartById(skuId);
        if(result.code == 200){
            return 'ok';
        }else{
            return Promise.reject(new Error('file'))
        }
    },
    //修改购物车某一个产品的选中状态
    async updateCheckedById({commit},{skuId,isChecked}){
        let result = await reqUpdateCheckedById(skuId,isChecked)
        if(result.code ==200){
            return 'ok';
        }else{
            return Promise.reject(new Error('file'))
        }
    },
    //删除全部勾选的产品
    deleteAllCheckedCart({dispatch,getters}){
        //context:小仓库 commit：提交mutations修改state
        //getters：计算属性    dispatch：派发action     state：当前仓库数据
        //获取购物车中全部商品(一个数组)
        let PromiseAll = [];
        getters.cartList.cartInfoList.forEach(item => {
           let promise = item.isChecked ==1? dispatch('deleteCartListBySkuId',item.skuId): '';
            PromiseAll.push(promise);
        });
        //如果全部的p1|p2....都成功，则返回结果为成功
        //如果有一个失败，返回结果为失败
        return Promise.all(PromiseAll);
    },
    //修改全部产品的状态
    updateAllCartChecked({dispatch,state},isChecked){
        let promiseAll =[]
        state.cartList[0].cartInfoList.forEach((item)=>{
            let promise = dispatch('updateCheckedById',{skuId:item.skuId,isChecked})
            promiseAll.push(promise)
        });
        //最终返回结果
        return Promise.all(promiseAll)
    }
};
//getters: 理解为计算属性,用于简化仓库数据，让组件获取仓库的数据更加方便
//项目当中getters作用是简化仓库数据
const getters = {
    //当前形参state是当前仓库的state，并非大仓库的state
    cartList(state){
        return state.cartList[0] || {}
    },
    
};


//对外暴露一个实例
export default {
    state,
    mutations,
    actions,
    getters
}